"""
确保代码在 Python 2 和 Python 3 中行为一致。
absolute_import：强制使用绝对导入（避免模块名冲突）。
division：使除法运算 / 返回浮点数（而非 Python 2 的整数除法）。
print_function：启用 Python 3 的 print() 函数语法。
unicode_literals：字符串字面量默认视为 Unicode（兼容文本处理）。
"""
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import datetime  # For datetime objects
import os.path  # To manage paths
import sys  # To find out the script name (in argv[0])

# 获取当前脚本的绝对路径，并找到父目录
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
# 将父目录添加到 Python 模块搜索路径
sys.path.append(parent_dir)
import backtrader as bt


def test1():
    cerebro = bt.Cerebro()

    #  返回当前账户总值（默认初始资金为 10000）
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())

    # 启动回测流程。未加载任何数据（如股票价格数据）。未添加任何交易策略（如买卖逻辑）。因此，引擎运行后不会执行任何操作，账户资金保持不变。
    cerebro.run()

    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())



def test2():
    cerebro = bt.Cerebro()

    # Datas are in a subfolder of the samples. Need to find where the script is
    # because it could have been called from anywhere
    modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
    datapath = os.path.join(modpath, '../datas/orcl-1995-2014.txt')

    # Create a Data Feed
    # Yahoo Online以日期降序发送CSV数据，这不是标准约定。 reversed=True 参数考虑了文件中CSV数据已经反向和具有标准预期日期升序的情况。
    data = bt.feeds.YahooFinanceCSVData(
        dataname=datapath,
        # Do not pass values before this date
        fromdate=datetime.datetime(2000, 1, 1),
        # Do not pass values after this date
        todate=datetime.datetime(2000, 12, 31),
        reverse=False)

    # Add the Data Feed to Cerebro
    cerebro.adddata(data)

    # Set our desired cash start
    cerebro.broker.setcash(100000.0)

    # Print out the starting conditions
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())

    # Run over everything
    cerebro.run()

    # Print out the final result
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())



if __name__ == '__main__':
    test2()


"""
https://www.heywhale.com/mw/project/63857587d0329ee911dcd7f2
"""